#ifndef __MY_HEADER_H
#define __MY_HEADER_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/select.h>
#include <time.h>
#include <sys/wait.h>
#include <dirent.h>
#include <syslog.h>
#include <sys/shm.h>
#include <sys/ipc.h>
#include <signal.h>
#include <sys/time.h>
#include <pthread.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/epoll.h>
#include <sys/sendfile.h>

// 求数组长度
#define ARR_LEN(arr) (sizeof(arr) / sizeof(arr[0]))
// 交换元素(int)
#define SWAP(arr, i, j)   \
	{                     \
		int tmp = arr[i]; \
		arr[i] = arr[j];  \
		arr[j] = tmp;     \
	}

// 检查命令行参数数量是否符合预期
#define ARGS_CHECK(argc, expected)                                         \
	do                                                                     \
	{                                                                      \
		if ((argc) != (expected))                                          \
		{                                                                  \
			fprintf(stderr, "[Error] expected %d arguments.\n", expected); \
			exit(1);                                                       \
		}                                                                  \
	} while (0)

// 检查返回值是否是错误标记,若是则打印func_name和错误信息
#define ERROR_CHECK(ret, error_flag, func_name) \
	do                                          \
	{                                           \
		if ((ret) == (error_flag))              \
		{                                       \
			perror(func_name);                  \
			exit(1);                            \
		}                                       \
	} while (0)

#define THREAD_ERROR_CHECK(ret, msg)                         \
	do                                                       \
	{                                                        \
		if (ret != 0)                                        \
		{                                                    \
			fprintf(stderr, "%s:%s \n", msg, strerror(ret)); \
		}                                                    \
	} while (0)

#endif
